热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

VBA在Excel中的应用(一)

目录ActiveCellActiveWorkbookAdvancedFilterAutoFillActiveCell1.检查活动单元格是否存在

目录

ActiveCell
ActiveWorkbook
AdvancedFilter
AutoFill

ActiveCell

  1. 1. 检查活动单元格是否存在
    Sub activeCell()
       
    If ActiveCell Is   Nothing   Then   End If
    End Sub
  2. 2. 通过指定偏移量设置活动单元格
    Sub offset()
        ActiveCell.Offset(RowOffset:
    =- 2 , ColumnOffset: = 4 ).Activate
    End Sub
    Offset函数的第一个参数为Row的偏移量,第二个参数为Column的偏移量(可以不指定),使用时可以直接给定值,如Offset(2, 4)。值小于0向相反方向偏移。Offset().Activate与Offset().Select在效果上等同。
  3. 3. 设置活动单元格的当前值
    Sub SetValue
       ActiveCell.Value
    =   " Hello World! "
    End Sub
  4. 4. 为当前活动单元格设置公式
    Sub fomula()
        ActiveCell.Formula
    =   " =SUM($G$12:$G$22) "
    End Sub
    将公式的表达式直接赋值给Formula属性,公式表达式可以参考Excel中的公式菜单,如求和、计数、求平均值等。
  5. 5. 获取当前活动单元格的地址
    Sub selectRange()
       
    MsgBox ActiveCell.Address
    End Sub
    地址的格式如:$A$11。
  6. 6. 获取从当前活动单元格开始到边界单元格的区域
    ' 从当前单元格到最顶端
    Sub SelectUp()
        Range(ActiveCell, ActiveCell.End(xlUp)).Select
    End Sub
    ' 从当前单元格到最底端
    Sub SelectDown()
        Range(ActiveCell, ActiveCell.End(xlDown)).Select
    End Sub
    ' 从当前单元格到最右端(等同于xlEnd)
    Sub SelectToRight()
        Range(ActiveCell, ActiveCell.End(xlToRight)).Select
    End Sub
    ' 从当前单元格到最左端
    Sub SelectToLeft()
        Range(ActiveCell, ActiveCell.End(xlToLeft)).Select
    End Sub
  7. 7. 当前活动单元格所在区域选择 
    Sub SelectCurrentRegion()
        ActiveCell.CurrentRegion.Select
    End Sub
    对CurrentRegion属性所代表的区域的说明:
    CurrentRegion返回活动单元格所在的周围由空行和空列组成的单元格区域(这个似乎有点不太好理解) ,可以看下图的示例:
    117823212可以这样理解CurrentRegion属性所代表的区域,即以活动单元格为中心,它所包含的矩形区域的每一行和每一列中至少包含有一个数据,上图中的蓝色阴影区域中,无论活动单元格是哪一个,其所在的当前区域均为同一区域,如B5:D7区域中的B5和C6单元格。A4的当前区域表示为A1:D7,A8的当前区域表示为A5:D11,A12的当前区域只有它本身。
    使用CurrentRegion属性相当于在Excel工作表中选择菜单“编辑-定位”命令,在弹出的“定位”对话框中单击“定位条件”按钮,然后在“定位条件”对话框中选中“当前区域”选项按钮,或者相当于使用Ctrl+Shift+*组合键。在Excel2007中,该命令在以下地方可以找到:
    3-10-2009 10-20-46 AM在下拉菜单中选择“Go To Special…” ,在对话框中选择“Current region”。
    3-10-2009 10-27-33 AM 有关使用CurrentRegion的一些例子:
     在下图中,要使用空白单元格上方的有数据的单元格中的数据来填充空白单元格。
    3-10-2009 10-30-05 AM
    代码如下,
    Sub FillBlankCells()
        Worksheets(
    " sheet1 " ).Range( " A1 " ).CurrentRegion.SpecialCells(xlCellTypeBlanks).FormulaR1C1 =   " =R[-1]C "
        Worksheets(
    " sheet1 " ).Range( " A1 " ).CurrentRegion.Value = Worksheets( " sheet1 " ).Range( " A1 " ).CurrentRegion.Value
    End Sub
    执行之后,工作表中单元格A1所在当前区域中的空白单元格被相应数据填充,如下图。
    3-10-2009 10-30-40 AM 
    如下图,对第三列进行降序排序。
    3-10-2009 10-31-06 AM 
    代码如下:
    Sub testSort()
       
    Dim rng As Range
       
    Set rng = Worksheets( " sheet1 " ).Cells( 1 , 1 ).CurrentRegion
        rng.Sort Key1:
    = rng.Cells( 1 , 3 ), Order1: = xlDescending, Header: = xlYes
    End Sub
    执行之后,工作表中的数据将按照第三列的数据降序排序,如下图。
    3-10-2009 10-31-22 AM 
  8. 8. 使用SpecialCells方法
    该方法用于返回与指定形态和值相符合的所有单元格,其中第一个参数为xlCellType类型所代表的常数。
    xlCellTypeAllFormatConditions 任何格式的单元格。
    xlCellTypeAllValidation 带数据校验的单元格。
    xlCellTypeBlanks 空单元格。
    xlCellTypeComments 包含注释的单元格。
    xlCellTypeConstants 包含常数的单元格。
    xlCellTypeFormulas 包含公式的单元格。
    xlCellTypeLastCell 已用范围的最后一个单元格。
    xlCellTypeSameFormatConditions 有相同格式的单元格。
    xlCellTypeSameValidation 有相同数据校验准则的单元格。
    xlCellTypeVisible 所有可见单元格。
    第二个参数为可选参数。如果xlCellType为xlCellTypeConstants或xlCellTypeFormulas 之一,该参数用于确定结果中应包含哪些类型的单元格。将某几个值相加可使此方法返回多种形态的单元格。默认情况下将指定所有常数或公式,对其形态则不加类型。它可以是下列常数之一。
    xlErrors
    xlLogical
    xlNumbers
    xlTextValues
    Sub SelectActiveArea()
        Range(Range(
    " A1 " ), ActiveCell.SpecialCells(xlTypeLastCell)).Select
    End Sub
    有关使用SpecialCells的一个例子:
    将下图所示的数据按顺序存放到一个新建的工作表中,
    3-10-2009 12-27-39 PM 
    Sub toAcol()
       
    Dim newSht As Worksheet
       
    Dim Rng As Range
       
    Dim allDat As Range
       
    Dim pt As Range
       
    Dim i As   Long
       
    ' 选择工作表中所有有内容的单元格
        Set allDat = ActiveSheet.Cells.SpecialCells(xlCellTypeConstants)
       
    ' 新增工作表
        Set newSht = Worksheets.Add
       
    ' 设置新工作表中的起始位置
        Set pt = newSht.Range( " a1 " )
       
    For   Each Rng In allDat.Areas
           
    For i =   1   To Rng.Cells.Count
                pt
    = Rng.Cells(i)
               
    Set pt = pt.Offset( 1 , 0 )
           
    Next
       
    Next
       
    ' 重命名新工作表
        newSht.Name =   " newSht "   & Worksheets.Count
    End Sub
    执行后,在名称为“newSht4”的工作表中会出现如下图所示的数据。
    3-10-2009 4-22-05 PM
  9. 9. 通过Application.WorksheetFunction调用Proper方法
    Sub FixText()
            ActiveCell.Value
    = Application.WorksheetFunction.Proper( " asdf " )
    End Sub
    该方法将给定的表达式中的第一个字母大写,而其余字母小写,示例中的代码将活动单元格的值设置为“Asdf”。
  10. 10. EntireRow和EntireColumn
    Sub SelectColumn()
        ActiveCell.EntireColumn.Select
    End Sub
    Sub SelectRow()
        ActiveCell.EntireRow.Select
    End Sub
    EntireColumn用于选择当前活动单元格所在的整列,EntireRow用于选择当前活动单元格所在的整行。
  11. 11. 找出当前所选区域中包含最大值的单元格
    Sub GoToMax()
       
    Dim WorkRange As Range
       
    If   TypeName (Selection) <>   " Range "   Then   Exit   Sub

       
    If Selection.Count =   1   Then
           
    Set WorkRange = Cells
       
    Else
           
    Set WorkRange = Selection
       
    End   If
        MaxVal
    = Application.Max(WorkRange)
        
       
    On   Error   Resume   Next
        WorkRange.Find(What:
    = MaxVal, _
            After:
    = WorkRange.Range( " A1 " ), _
            LookIn:
    = xlValues, _
            LookAt:
    = xlPart, _
            SearchOrder:
    = xlByRows, _
            SearchDirection:
    = xlNext, MatchCase: = False ).Select
       
    If Err <>   0   Then   MsgBox   " Max value was not found: "   & MaxVal
    End Sub
  12. 12. WarpText属性
    Sub ToggleWrapText()
       
    If   TypeName (Selection) =   " Range "   Then
          Selection.WrapText
    =   Not ActiveCell.WrapText
       
    End   If
    End Sub
    WarpText属性用于指示当前活动单元格是否被设置为允许换行。

返回目录

ActiveWorkbook

  1. 1. 获取当前活动工作簿的名称
    Sub test()
       
    MsgBox ActiveWorkbook.FullName
    End Sub
  2. 2. 打开工作表
    Sub filePath()
       
    Dim filePath As   String
        filePath
    = ActiveWorkbook.Path
        Workbooks.Open (filePath
    &   " \ "   &   " MyWorkbook.xls " )
    End Sub
  3. 3. 保存工作表
    Sub webPage()
        ActiveWorkbook.SaveAs _
            Filename:
    = ActiveWorkbook.Path &   " \myXclfile.htm " , _
            FileFormat:
    = xlHtml
    End Sub
  4. 4. 预览工作表
    Sub pre()
        ActiveWorkbook.WebPagePreview
    End Sub
  5. 5. 发布Excel文件到指定的目录
    Public   Sub SaveRangeWeb()
        ActiveWorkbook.PublishObjects.Add _
            SourceType:
    = xlSourceRange, _
            Filename:
    = ActiveWorkbook.Path &   " \Sample1.htm " , _
            Sheet:
    = ActiveSheet.name, _
            Source:
    = " $A$1:$B$11 " , _
            HtmlType:
    = xlHtmlStatic

        ActiveWorkbook.PublishObjects(
    1 ).Publish ( True )
        ActiveWorkbook.PublishObjects(
    1 ).AutoRepublish ( False )
    End Sub
    上述代码可以将当前工作簿中所选择的区域以htm文件的格式发布到一个指定的目录中,该目录可以是本地目录,也可以是远程服务器上的目录,或者是Sharepoint中的一个特定的Folder。Publish方法的参数为True表示如果目标地址的文件存在则替换,为False表示如果目标地址的文件存在则追加。AutoRepublish方法的参数用于指示当Excel文件保存的时候是否自动重新发布。
    在Excel2007中,相当于点击窗体左上角的Office按钮,选择“发布”,点击“Document Management Server”,在弹出的对话框中选择相应的格式对文档进行发布操作。
  6. 6. 遍历ActiveWorkbook中的表单集合
    Sub Test()
       
    For   Each Item In ActiveWorkbook.Sheets
            Debug.Print Item.name
       
    Next Item
    End Sub
  7. 7. 关闭当前工作簿
    Sub close()
        ActiveWorkbook.Close SaveChanges:
    = False
    End Sub
    将当前工作簿关闭,SaveChanges为False表示不保存当前更改。
  8. 8. 保护工作簿的结构和窗体
    Sub protect()
        ActiveWorkbook.Protect Password:
    = " pass " , Structure: = True , Windows: = True
    End Sub
    该操作相当于在Excel2007中,选择“Review”菜单,选择“Protect Workbook”,点击“Protect Structure and Windows”操作,该代码示例中给该操作设置了一个用于还原的密码。
  9. 9. 打印工作表
    Sub print()
        ActiveWorkbook.Sheets(
    1 ).Printout Copies: = 2 , Collate: = True
    End Sub
  10. 10. 移除工作簿中的个人信息
    Sub remove()
        ActiveWorkbook.RemovePersonalInformation
    =   True
    End Sub
  11. 11. 为工作簿设置打开密码
    Sub pass()
        ActiveWorkbook.Password
    =   " pass "
    End Sub
    该操作相当于在Excel2007中,点击“另存为”,在弹出的对话框中选择“工具”,点击“General Options...”,在弹出的对话框中设置用于打开工作簿的密码。
  12. 12. 为工作簿设置可写密码
    Sub passWrite()
        ActiveWorkbook.WritePassword
    =   " pass "
    End Sub
    该操作相当于在Excel2007中,点击“另存为”,在弹出的对话框中选择“工具”,点击“General Options...”,在弹出的对话框中设置可修改工作簿的密码。
  13. 13. 在当前工作簿中打开新窗口
    Sub   new ()
        ActiveWorkbook.Windows(
    1 ).NewWindow
    End Sub
  14. 14. 通过编程方式查找遍历工作簿当中的所有链接
    Sub PrintSimpleLinkInfo()
       
    Dim avLinks As Variant
       
    Dim nIndex As   Integer
       
    Dim wb As Workbook
       
    Set wb = ActiveWorkbook
        avLinks
    = wb.LinkSources(xlExcelLinks)
       
    If   Not   IsEmpty (avLinks) Then
           
    For nIndex =   1   To   UBound (avLinks)
                Debug.Print
    " Link found to ' "   & avLinks(nIndex) &   " ' "
           
    Next nIndex
       
    Else
            Debug.Print
    " The workbook ' "   & wb.name &   " ' doesn't have any links. "
       
    End   If
    End Sub
    xlLink为一组常量,代表了Excel工作簿中各种不同类型的链接。
    xlExcelLinks 指向Excel工作表。
    xlOLELinks 指向OLE数据源。
    xlPublishers Macintosh使用。
    xlSubscribers Macintosh使用。
  15. 15. 工作簿常用属性使用
    Sub TestPrintGeneralWBInfo()
       
    Dim wb As Workbook
       
    Set wb = ActiveWorkbook

        Debug.Print
    " Name: "   & wb.name
        Debug.Print
    " Full Name: "   & wb.FullName
        Debug.Print
    " Code Name: "   & wb.CodeName
        Debug.Print
    " Path: "   & wb.Path
       
    If wb.ReadOnly Then
            Debug.Print
    " The workbook has been opened as read-only. "
       
    Else
            Debug.Print
    " The workbook is read-write. "
       
    End   If
       
    If wb.Saved Then
            Debug.Print
    " The workbook does not need to be saved. "
       
    Else
            Debug.Print
    " The workbook should be saved. "
       
    End   If
    End Sub

返回目录

ActiveWorksheet

  1. 1. 改变当前工作表的名称
    Sub changeName()
        ActiveSheet.name
    =   " My Sheet "
    End Sub
  2. 2. 向当前工作表添加超链接
    Public   Sub AddHyperlink()
        ActiveSheet.Hyperlinks.Add _
            Anchor:
    = Range( " A1 " ), _
            Address:
    = "" , _
            SubAddress:
    = " 'Sheet1'!A1 " , _
            ScreenTip:
    = " Goes to Sheet1 " , _
            TextToDisplay:
    = " Link to Sheet1 "
    End Sub
  3. 3. 使用Copy和Paste方法
    Sub copy()
        Cells(
    2 , " B " ).copy
        Range(
    " B2:B10 " ).Select
        ActiveSheet.Paste
    End Sub
    单元格拷贝时会同时拷贝该单元格的内容、格式以及公式等信息。
  4. 4. 对工作表设置密码
    Sub protect()
        ActiveWorksheet.Protect Password:
    = " pass "
    End Sub
    Sub protects()
        ActiveWorksheet.Protect Password:
    = " pass " , AllowFormattingCells: = True , _
            AllowSorting:
    = True
    End Sub
  5. 5. 设置工作表的DisplayPageBreaks属性
    Sub Main()
        ActiveSheet.DisplayPageBreaks
    =   False
        ActiveSheet.DisplayPageBreaks
    =   True
    End Sub
    DisplayPageBreaks属性用于指示是否显示工作表的分页符,如果没有安装打印机,则不能设置该属性的值。

返回目录

AdvancedFilter

  1. 1. 使用AdvancedFilter
    Sub UniqueCustomerRedux()
        Range(
    " J1 " ).Value = Range( " D1 " ).Value
        Range(
    " A1 " ).CurrentRegion.AdvancedFilter xlFilterCopy, CopyToRange: = Range( " J1 " ), Unique: = True
    End Sub
    AdvancedFilter的使用类似于在Excel2007中“Data”菜单下“Sort&Filter”分类中的“Advanced”菜单的功能,其中xlFilterAction常量用于指定如何对数据进行Filter。

返回目录

AutoFill

  1. 1. 使用AutoFill方法自动填充单元格
    Sub autoFill()
        Range(
    " F2:F13 " ).autoFill Destination: = Range( " F2:I11 " )
    End Sub
    用于从SourceRange填充数据到DestinationRange,可选参数xlAutoFillType常量用于指定填充数据的方式。数据填充过程中如果SourceRange和DestinationRange的Rows数目不一致会发生异常。

返回目录


推荐阅读
  • Codebelowwascreated(notbyme,andsavedas*.dotm)inMicrosoftWord97-2003,whendefaultins ... [详细]
  • 本文介绍了Foundation框架中一些常用的结构体和类,包括表示范围作用的NSRange结构体的创建方式,处理几何图形的数据类型NSPoint和NSSize,以及由点和大小复合而成的矩形数据类型NSRect。同时还介绍了创建这些数据类型的方法,以及字符串类NSString的使用方法。 ... [详细]
  • Tryingtosaveanew,notyetnamed,workbook(thatIaddedusinganothersub)withvariablesforth ... [详细]
  • ImusingCDatetoconvertaparticulardateformattedasstringtotheExcelDatetype.Iwroteas ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • node.jsurlsearchparamsAPI哎哎哎 ... [详细]
  • python3 logging
    python3logginghttps:docs.python.org3.5librarylogging.html,先3.5是因为我当前的python版本是3.5之所 ... [详细]
  • IamusingaUserForminExceltomovecontentfromtextbox1tofirstemptyrowonsheet2.Belowc ... [详细]
author-avatar
郭尚刚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有